package com.thd.framework.basic.utils;




import org.apache.commons.codec.digest.DigestUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5Utils {

	/**
	 * 字符串生成md5
	 * @param str
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws UnsupportedEncodingException
	 */
	public static String encoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{
	        //确定计算方法
//	    MessageDigest md5=MessageDigest.getInstance("MD5");
//		Base64.Encoder encoder = Base64.getEncoder();
//	    //加密后的字符串
//	    String newstr=encoder.encodeToString(md5.digest(str.getBytes("utf-8")));

		String newstr = DigestUtils.md5Hex(str);
	    return newstr;
	}

	/**
	 * 将文件生成md5
	 * @param path 文件路径
	 * @return md5码
	 * @throws Exception
	 */
	public static String generateMD5(String path) throws Exception	{
		String strMD5 = null;
		File file = new File(path);
		FileInputStream in = new FileInputStream(file);
		String md5 = DigestUtils.md5Hex(in);
		in.close();
		return md5;
//		MappedByteBuffer buffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
//		MessageDigest digest = MessageDigest.getInstance("md5");
//		digest.update(buffer);
//		in.close();
//
//		byte[] byteArr = digest.digest();
//		BigInteger bigInteger = new BigInteger(1, byteArr);
//		strMD5 = bigInteger.toString(16);
//		return strMD5;
	}

	/**
	 * 输入流生成md5
	 * @param in 输入流
	 * @return
	 * @throws Exception
	 */
	public static String generateMD5ByInputstream(InputStream in) throws Exception	{
//		String strMD5 = null;
//		MessageDigest digest = MessageDigest.getInstance("md5");
//		byte[] buff = new byte[1024];
//		int size = -1;
//		while((size=in.read(buff))!=-1)
//		{
//			digest.update(buff, 0, size);
//		}
//		in.close();
//		BigInteger bigInteger = new BigInteger(1, digest.digest());
//		strMD5  = bigInteger.toString(16);
//		return strMD5;

		String md5 = DigestUtils.md5Hex(in);
		in.close();
		return md5;
	}

	public static String generateMD54ByteArray(String path) throws Exception{
		String strMD5 = null;
		MessageDigest digest = MessageDigest.getInstance("md5");
		InputStream in = new FileInputStream(path);


		String md5= DigestUtils.md5Hex(in);
		in.close();
		return md5;
//		byte[] buff = new byte[1024];
//		int size = -1;
//		while((size=in.read(buff))!=-1)
//		{
//			digest.update(buff, 0, size);
//		}
//		in.close();
//		BigInteger bigInteger = new BigInteger(1, digest.digest());
//		strMD5  = bigInteger.toString(16);
//		return strMD5;
	}


//	public static void main(String[] args) throws Exception{
//
//		String md51 = MyMd5Utils.generateMD5("D:\\pic\\a4.jpg");
//		String md52 = MyMd5Utils.generateMD54ByteArray("D:\\pic\\a4.jpg");
//
//		File f = new File("D:\\pic\\a4.jpg");
//		InputStream is = new FileInputStream(f);
//		String md53 = MyMd5Utils.generateMD5ByInputstream(is);
//
//		System.out.println(md51);
//		System.out.println(md52);
//		System.out.println(md53);
//
//
//		String str = "111234561234234123414141414323224";
//		System.out.println(MyMd5Utils.encoderByMd5(str));
//	}




}
